//
//  GTLMessageBaseCell.h
//  ChatDemo
//
//  Created by 九月 on 1/1/25.
//

#import <UIKit/UIKit.h>

#import "JVHGMessageModel.h"

#import "FNRUserChargeChatAction.h"


NS_ASSUME_NONNULL_BEGIN

@interface GTLMessageBaseCell : UICollectionViewCell


@property (strong, nonatomic) FNRUserChargeChatAction *mySelf;
@property (strong, nonatomic) FNRUserChargeChatAction *otherUser;

/*!
 自定义消息Cell的Size

 - Parameter model:               要显示的消息model
 - Parameter collectionViewWidth: cell所在的collectionView的宽度
 - Parameter extraHeight:         cell内容区域之外的高度

 - Returns: 自定义消息Cell的Size

  当应用自定义消息时，必须实现该方法来返回cell的Size。
 其中，extraHeight是Cell根据界面上下文，需要额外显示的高度（比如时间、用户名的高度等）。
 一般而言，Cell的高度应该是内容显示的高度再加上extraHeight的高度。
 */
+ (CGSize)sizeForMessageModel:(JVHGMessageModel *)model
      withCollectionViewWidth:(CGFloat)collectionViewWidth
         referenceExtraHeight:(CGFloat)extraHeight;


/*!
 显示时间的Label
 */
@property (strong, nonatomic) UILabel *messageTimeLabel;

/*!
 消息Cell的数据模型
 */
@property (strong, nonatomic) JVHGMessageModel *model;

/*!
 Cell显示的View
 */
@property (strong, nonatomic) UIView *baseContentView;

/*!
 消息的方向
 */
@property (nonatomic) RCMessageDirection messageDirection;

/*!
 时间Label是否显示
 */
@property (nonatomic, readonly) BOOL isDisplayMessageTime;

/*!
 是否显示阅读状态
 */
@property (nonatomic) BOOL isDisplayReadStatus;

/*!
 是否允许选择
 */
@property (nonatomic) BOOL allowsSelection;

/*!
 初始化消息Cell

 - Parameter frame: 显示的Frame
 - Returns: 消息Cell基类对象
 */
- (instancetype)initWithFrame:(CGRect)frame;

/*!
 设置当前消息Cell的数据模型

 - Parameter model: 消息Cell的数据模型
 */
- (void)setDataModel:(JVHGMessageModel *)model;

/*!
 消息发送状态更新的监听回调

 - Parameter notification: 消息发送状态更新的Notification
 */
- (void)messageCellUpdateSendingStatusEvent:(NSNotification *)notification;

@end


@interface GTLMessageBaseCell (TABTools)

+ (UIImage *)tt_getDefaultMessageCellBackgroundImage:(JVHGMessageModel *)model;

+ (CGFloat)tt_referenceExtraHeight:(Class)cellClass messageModel:(JVHGMessageModel *)model;

+ (CGSize)getThumbnailImageSize:(UIImage *)image;

+ (UIImage *)ayiguGetResizableImage:(UIImage *)cunhua;

@end

NS_ASSUME_NONNULL_END
